"""
索引管理器模块

统一的索引管理接口，整合各种存储功能。

重构后的模块结构：
- storage_base.py: 存储管理基础功能
- index_storage.py: 向量索引存储管理
- index_manager.py: 统一索引管理接口
"""

from typing import Optional, List, Dict, Any

from llama_index.core import VectorStoreIndex, Document

from .storage_base import StorageBase
from .index_storage import IndexStorage


class IndexManager:
    """
    高级索引管理器

    职责：
    1. 提供统一的索引管理接口
    2. 整合索引存储和文档加载功能
    3. 提供索引生命周期管理
    4. 监控和维护索引状态
    """

    def __init__(self, index_dir: Optional[str] = None):
        """
        初始化索引管理器

        Args:
            index_dir: 索引存储目录
        """
        self._index_storage = IndexStorage(index_dir)

    @property
    def storage(self) -> IndexStorage:
        """获取索引存储管理器"""
        return self._index_storage

    @property
    def index_dir(self) -> str:
        """获取索引目录路径"""
        return self._index_storage.index_dir

    def index_exists(self) -> bool:
        """
        检查索引是否存在

        Returns:
            bool: 索引是否存在
        """
        return self._index_storage.index_exists()

    def create_index(self, documents: List[Document]) -> VectorStoreIndex:
        """
        创建新的索引

        Args:
            documents: 文档列表

        Returns:
            VectorStoreIndex: 创建的索引
        """
        return self._index_storage.create_index(documents)

    def save_index(self, index: VectorStoreIndex) -> None:
        """
        保存索引

        Args:
            index: 要保存的索引
        """
        self._index_storage.save_index(index)

    def load_index(self) -> Optional[VectorStoreIndex]:
        """
        加载索引

        Returns:
            Optional[VectorStoreIndex]: 加载的索引
        """
        return self._index_storage.load_index()

    def get_or_create_index(self, documents: List[Document]) -> VectorStoreIndex:
        """
        获取现有索引或创建新索引

        Args:
            documents: 文档列表

        Returns:
            VectorStoreIndex: 索引实例
        """
        return self._index_storage.get_or_create_index(documents)

    def update_index(self, documents: List[Document]) -> VectorStoreIndex:
        """
        增量更新索引

        Args:
            documents: 新增文档列表

        Returns:
            VectorStoreIndex: 更新后的索引
        """
        return self._index_storage.update_index(documents)

    def get_index_info(self) -> Dict[str, Any]:
        """
        获取索引信息

        Returns:
            Dict[str, Any]: 索引信息
        """
        return self._index_storage.get_index_info()

    def delete_index(self) -> bool:
        """
        删除索引

        Returns:
            bool: 是否删除成功
        """
        return self._index_storage.delete_index()

    def backup_index(self, backup_path: str) -> bool:
        """
        备份索引

        Args:
            backup_path: 备份路径

        Returns:
            bool: 是否备份成功
        """
        return self._index_storage.backup_index(backup_path)

    def reload_index(self) -> Optional[VectorStoreIndex]:
        """
        重新加载索引

        Returns:
            Optional[VectorStoreIndex]: 重新加载的索引
        """
        return self._index_storage.reload_index()

    @property
    def index(self) -> Optional[VectorStoreIndex]:
        """获取当前索引实例"""
        return self._index_storage.index

    def __str__(self) -> str:
        """返回管理器信息的字符串表示"""
        return str(self._index_storage)


# 全局索引管理器实例
index_manager = IndexManager()